package framework.util.jdkExt;

import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;
import org.springframework.util.CollectionUtils;


/**
 * 对集合的工具类
 *
 * @author 吴宇亮
 * @date 2019年1月23日
 */
@SuppressWarnings("ALL")
public class _CollectionUtil {

	/**
	 * 对list的每个字符串，用sperator进行分隔
	 *
	 * @param list
	 * @param sperator 分割符
	 * @author 吴宇亮 2019年3月21日
	 */
	public static String join(List<? extends Object> list, String sperator){
		if(CollectionUtils.isEmpty(list)){
			return "";
		}
		StringBuilder sb = new StringBuilder();
		for(int i = 0, j = list.size(); i < j; i++){
			Object item = list.get(i);
			if(null == item){
				item = "";
			}
			sb = (i != j - 1) ? sb.append(item.toString() + sperator) : sb.append(item.toString());
		}
		return sb.toString();
	}
	
	/**
	 * 对list的javabean的某个属性进行拼接
	 *
	 * @param list 装有javabean的list
	 * @param fieldName 要拼接的javabean的属性名称
	 * @param separated 分隔符
	 * @author 吴宇亮 2019年1月23日
	 */
	public static String join(List<? extends Object> list, String fieldName, String separated) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
		if(CollectionUtils.isEmpty(list)){
			return "";
		}
		StringBuilder sb = new StringBuilder(50);
		for(int i = 0, j = list.size(); i < j; i++){
			String property = BeanUtils.getProperty(list.get(i), fieldName);
			sb = (i != j - 1) ? sb.append(property + separated) : sb.append(property);
		}
		return sb.toString();
	}

	/**
	 * 对list的Map的某个key对应的value进行拼接
	 *
	 * @param list 装有Map的list
	 * @param key 要拼接的key名称
	 * @param sperator 分隔符
	 * @author 吴宇亮 2019年3月28日
	 */
	public static<T> String join(List<Map<T, ?>> list, T key, String sperator){
		if(CollectionUtils.isEmpty(list)){
			return "";
		}
		StringBuilder sb = new StringBuilder();
		for(int i = 0, j = list.size(); i < j; i++){
			sb = (i != j - 1) ? sb.append(list.get(i).get(key) + sperator) : sb.append(list.get(i).get(key));
		}
		return sb.toString();
	}

}
